package com.zhang.queue;

import com.zhang.heap.BinaryHeap;

import java.util.Comparator;

/**
 * @author 张吉鑫
 * @Description 优先级队列用二叉堆实现
 * @date 2021/4/8 15:30
 */
public class PriorityQueue<E>{
    private BinaryHeap<E> heap;

    public PriorityQueue(){
        this(null);
    }

    public PriorityQueue(Comparator<E> comparator){
        heap = new BinaryHeap<>(comparator);
    }

    /**
     * 元素数量
     * @return
     */
    public int size(){
        return heap.size();
    }

    /**
     * 判断元素是否为空
     * @return
     */
    public boolean isEmpty(){
        return heap.size() == 0;
    }

    /**
     * 入队
     * @param element
     */
    public void enQueue(E element){
        heap.add(element);
    }

    /**
     * 出队
     * @return
     */
    public E deQueue(){
        return heap.remove();
    }

    /**
     * 获取队列的头元素
     * @return
     */
    public E front(){
        return heap.get();
    }

    /**
     * 清空
     */
    public void clear(){
        heap.clear();
    }
}
